package com.yanxu.singleton;

/**
 * @author 折戟沉沙铁未销
 * @version V1.0
 * @date 2025/3/12-2025
 * @Description: 懒汉式 创建单例对象
 *      所谓懒汉式 就是在初始化的时候不会创建，只有在真正用的时候才会创建
 *      构造方法私有化
 */
public class LazySingleton {
    //public static LazySingleton lazySingleton=null;
    public static volatile LazySingleton lazySingleton = null;
    private LazySingleton() {
    }

/*    public static LazySingleton getInstance() {
        if (lazySingleton == null) {
            lazySingleton=new LazySingleton();
        }
        return lazySingleton;
    }*/

    //加锁 解决单例问题
/*  public synchronized static LazySingleton getInstance() {
        if (lazySingleton == null) {
            lazySingleton=new LazySingleton();
        }
        return lazySingleton;
    }*/


    // 双重检查机制 解决单例问题
/*  public static LazySingleton getInstance() {
        if (lazySingleton == null) {
            synchronized (LazySingleton.class) {
                if (lazySingleton == null) {
                    lazySingleton = new LazySingleton();
                    //1：分配内存空间给这个对象
                    //2：初始化对象，比如设置属性值等。
                    //3：设置 lazySingleton 指向分配的内存空间

                    //这里是有可能发生重排序的。（重排序不会影响单线程的执行结果，但是可能会影响多线程的执行结果。）
                }
            }
        }
        return lazySingleton;
    }*/


    public static LazySingleton getInstance() {
        if (lazySingleton == null) {
            synchronized (LazySingleton.class) {
                if (lazySingleton == null) {
                    lazySingleton = new LazySingleton();
                    //1：分配内存空间给这个对象
                    //2：初始化对象，比如设置属性值等。
                    //3：设置 lazySingleton 指向分配的内存空间

                    //要禁止重排序，需要使用 volatile 关键字。
                    //public static volatile LazySingleton lazySingleton=null;
                }
            }
        }
        return lazySingleton;
    }


}